package QianFeng17;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
/**
 * 接口回调：
 * 当一个对象需要给外部对象提供数据时，我们可以定义一个内部接口把数据通过接口传递出去，
 * 所有外部对象需要这个数据时，就实现这个接口，
 * 这样的好处是：传递数据的对象不直接依赖接收数据的对象（降低耦合性）
 **/
public class Frame2 extends Frame {

    private TextField textField = new TextField(20);
    private Button btn = new Button("payment");

    public Frame2() {
        this.setBounds(1000,300,600,400);
        this.setLayout(new FlowLayout());
        this.add(textField);
        this.add(btn);
        btn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String money = textField.getText();
                moneyListener.setMoney(money);
            }
        });
        //给窗体添加关闭事件
        this.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                super.windowClosing(e);
                System.exit(0);
            }
        });
        this.setVisible(true);
    }

    //接口回调的本质就是谁提供数据，谁就提供对外的接口，
    //这样的好处是让依赖数据的一方去依赖提供数据一方的接口来完成数据传递，以达到类之间解耦的目的
    private MoneyListener moneyListener;

    public void setMoneyListener(MoneyListener moneyListener) {
        this.moneyListener = moneyListener;
    }

    public static interface MoneyListener{
        void setMoney(String money);
    }

}
